package ru.vsu.amm.fuzzy;

import java.util.ArrayList;
import java.util.List;

/**
 * Лингвистическая шкала S.
 * 
 * @author Иванов Илья
 * @since 07 декабря 2012
 */
public enum Scale {
	N,	// несущественный
	VL,	// очень низкий
	L,	// низкий
	M,	// средний
	H,	// высокий
	VH,	// очень высокий
	P;	// значительный
	
	public static final int T = values().length - 1;
	
	public static Scale getByIndex(int index) {
		if (index < 0 || index > T)
			return null;
		
		for (Scale score : values())
			if (score.ordinal() == index)
				return score;
		
		return null;
	}
	
	public static Scale neg(Scale score) {
		return getByIndex(T - score.ordinal());
	}
	
	public static Scale min(Scale s1, Scale s2) {
		return getByIndex(Math.min(s1.ordinal(), s2.ordinal()));
	}
	
	public static Scale max(Scale s1, Scale s2) {
		return getByIndex(Math.max(s1.ordinal(), s2.ordinal()));
	}
	
	public static List<Scale> parseScales(String scalesString) {
		List<Scale> scales = new ArrayList<>();
		for (String scale : scalesString.split(" "))
			try {
				scales.add(valueOf(scale));
			} catch (Exception e) {}
		
		return scales;
	}
}